How Reblogs Work
2019/12/3
How Reblogs Work
このreblogは、他のユーザーの投稿を自分のTumblr reblogに配置し、一種のシグナルブーストとして機能します。また、reblogに独自のコメントを追加する機能を提供します。これにより、フォロワーや投稿のメモを見ている人が見ることができます。また、自分自身がreblogを作成して、私たちが愛する多くのミームのソースである素晴らしい進化するreblogの証跡を作成することもできます。しかし、reblog trailとreblog treeとは何であり、それはすべて内部でどのように機能するのでしょうか。
「reblog tree」は、元の投稿(Tumblrでは内部的に「ルート投稿」と呼びます)から始まり、それぞれのreblogに外向きに広がり、そして、それらのブログのそれぞれのブログは、「ブログの証跡」のブランチでツリーのような構造を形成しています。例として、@ staffが投稿を作成し、誰かがそれをreblogに書き直し、他の人がそれらのreblogをreblogに書き直すことを想像できます。
私はまた、reblogの1つを通過して reblog することもできます。
https://gyazo.com/c73db878699c7328485462db16d3e7ee
「reblog trail」はそれらの分岐の1つで、元の投稿から始まり、一度に1つずつ別の投稿まで続きます。reblog trailには、実際に独自のコンテンツを追加したreblogと追加しなかったreblogがあります。コンテンツを追加したreblogは trailに表示されますが、中間のreblogは表示されない場合があります。
https://gyazo.com/2ded6aaa23fc81e8d46b344c5725fc12
dashboardなどのどこかで表示しているreblog trailには、このreblog treeのすべてが表示されているわけではなく、その一部しか表示されていないことがわかります。非常に人気の高い投稿のメモを開くと、おそらく投稿のreblogの軌跡の現在のビューには表示されていない多くのreblogが表示されます。上の図は、reblog tree全体(表示されていない)と実際に表示している現在のreblogの軌跡(オレンジ色)を示しています。投稿全体のreblog treeを視覚化したい場合、reblogグラフTumblr Labsの実験では、これらのreblog treeと trailを一種の大きなフロッピー生物として示しています。これらは、コンテンツがreblogを通じてTumblrに浸透する様子を視覚化するのに役立ちます。現在、実験をオンにしてWebで見ることができますが、例は次のとおりです。
https://gyazo.com/45163d0200a7a1ed201a46a0fd511171
オレンジ色の小さな点は私たちが表示している投稿で、緑の線は多くのreblogに沿って投稿された投稿を示すreblogの軌跡です。また、元の投稿には他にもたくさんのブランチ/ trailがあり、数十の異なるreblogtrailを作成しています。これは、上の簡単な図よりもはるかに大きく、より現実的な例です。上の図は、既存の treeの一部をどんどん多くの人々が持った後の、これらの巨大なreblog treeの1つの始まりにすぎないと想像できます。
reblogtrail情報の保存
reblogとその軌跡に関する情報を実際に保存する方法は、昨年と比べて大きく変わりました。今年以前に作成されたすべての投稿について、投稿のコンテンツはすべて、HTMLと、投稿データモデルに固有のプロパティの組み合わせとして保存されていました。特定のreblogには、reblog全体の履歴ではなく、reblog全体のすべてのコンテンツが保存されていました。 Tumblrでテーマを作成したことがある、またはreblogのコードを掘り下げたことがある場合は、次の古典的なブロック引用構造に慣れているはずです。
code:html
<blockquote>
<blockquote>
<!-- original post content -->
<p>look at my awesome original content</p>
</blockquote>
<!-- the reblog of the original post's content -->
<p>well, it's just okay original content</p>
</blockquote>
<!-- this is the new content, added in our reblog of the reblog -->
<p>jeez. thanks a lot.</p>
このHTMLは、(偽の)古いテキスト投稿を表しています。元の投稿は、HTMLで最も深くネストされているブロッククォートです。「私の素晴らしいオリジナルコンテンツを見てください」であり、cyleによって作成されました。元の投稿のURLへの参照が、そのblockquoteタグの上のアンカータグにあります。あるレベルから次のブロッククォートに移動するのは、マリアによって作成された元の投稿のreblogです。このreblog自体が、reblogの証跡に独自のコメントを追加します。最も遠く、HTMLの一番下に移動しているのは、表示している投稿に追加されている最新のreblogコンテンツです。この構造により、元のreblogとこのreblogの間にある投稿を読み込まなくても、投稿とそのreblogの記録を表示するために必要なものがすべて揃っています。
これが見た目も混乱もしますが、それは非常に複雑なためです。私たちはあなたのそばにいますが、この構造を使用する背後にある理由は当時は健全でした。通常の従来のリレーショナルデータベースでは、reblogtrailのようなものが一連の参照として表されることが期待されます。reblogの投稿はその親投稿、ルート投稿、および中間投稿を参照し、それらの投稿を読み込みます。実行時にJOINクエリまたはそのような非常に正規化されたリレーショナルなコンテンツを使用して、データをコピーせず、参照するだけにします。
ただし、この従来のアプローチの主な欠点は、特にTumblrの規模では、reblogのロードは、reblogtrailにある投稿の数によっては、1つのクエリから複数のクエリに移行する可能性があることです。 Tumblrのreblogの一部には、何千もの長い投稿があります。 1つのreblogを読み込むために他の1,000件の投稿を読み込まなければならないことは破壊的です。代わりに、reblogが作成されるたびにreblogの証跡コンテンツを実際にコピーすることにより、必要なクエリの数を一定に保ちます:投稿ごとに1つだけです! 20件のreblogのdashboardは、それらの20件の投稿をロードします。各投稿の証跡にあるreblogの数に基づいて変動する量ではありません。これは、Tumblrが実際に内部で実行していることの単純化しすぎですが、このコア戦略は本物です。
壊れたreblogtrail
上記のブロッククォート/ HTML戦略にはもう1つの明らかな問題があります。これは、自分が見ていることに気付いていなかったかもしれませんが、おそらく以前に経験したことのあるものです。上記のreblogtrailにある唯一の参照が trail投稿のパーマリンクURLである場合、そのreblogの名前が変更されるとどうなりますか? Tumblrはすべての投稿を調べて、reblogが関与したすべてのreblogのすべてのコピーでその名前を更新するわけではありません。代わりに正常に失敗し、デフォルトのアバターがプレースホルダーとして表示される場合があります。古い投稿コンテンツには他の有用な情報が保存されていないため、文字通り他に選択肢はありません。
最悪の場合、誰かが trailで使用されているreblogの名前をとります。上記の例で、oliがreblog名をbritish-oliに変更し、その後誰かがoliの名前を手に取ったとします。その場合、ありがたいことに、投稿IDは古いolireblogに関連付けられているため、投稿URLはまだ機能しません。その結果、reblogの跡に「壊れた」アイテムがあるように見え、通常はreblogが無効になっているかアクセスできないように見えます。これは素晴らしいことではありません。
Neue Post Format(NPF)のロールアウトの一環として、各投稿にreblogの記録を保存する方法を変更しました。
完全にNPFのreblogtrailの場合、実際には、信頼できない投稿URLだけでなく、各reblogへの不変の参照と trailに投稿を保存します。これにより、誰かがreblog名を変更したり、他の方法で利用できなくなったりした場合の失敗率を大幅に下げることができます。私たちは通常必要なすべての情報を持つという同じ有益な戦略を維持しているため、 trailに沿ってそれらの投稿をロードする必要はありませんが、特に必要な場合は、個々の投稿またはreblogをロードするオプションがあります。それらのreblogの1つがあなたがブロックしている誰かであるかのような場合。
NPFでreblogの記録をいじった場合は、この変更の結果が表示されます。
reblog trailは、もはや乱雑なネストされたブロック引用チェーンではなく、代わりにフレンドリーで簡単に解析できるJSON配列で、常に元の投稿から始まり、 trailを下っていきます。これには、非常に古い投稿で時々発生する、 trail内のアイテムが回復できない方法で壊れている特殊なケースが含まれます。
上記と同じreblog trailと新しいコンテンツですが、Neue Post形式です。
code:json
{
"trail": [
{
"post": {
"id": "1234",
},
"blog": {
"name": "cyle"
},
"content": [
{
"type": "text",
"text": "look at my awesome original content"
}
],
"layout": []
},
{
"post": {
"id": "3456",
},
"blog": {
"name": "maria"
},
"content": [
{
"type": "text",
"text": "well, it's just okay original content"
}
],
"layout": []
}
],
"content": [
{
"type": "text",
"text": "jeez. thanks a lot."
}
]
}